package com.jdk.demo.fileChannel.positionWrite;

import java.io.File;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

// write(ByteBuffer src, long position)作用是将缓冲区的remaining剩余字节序列写入通道的指定位置
// 1、src：要传输其中字节的缓冲区
// 2、position：开始传输的文件位置，必须为非负数
// 除了从给定的文件位置开始写入各字节，而不是从该通道的当前位置外，此方法的执行方式与write(ByteBuffer)方法相同。此方法不修改此通道的位置。
// 如果给定的位置大于该文件的当前大小，则该文件将扩大以容纳新的字节；在以前文件末尾和新写入字节之间的字节值是未指定的
public class Test7_1 {
	
	// 验证write是从通道的指定位置开始写入；将ByteBuffer的remaining写入通道
	public static void main(String[] args) throws Exception {
		FileOutputStream fosRef = new FileOutputStream(new File("g.txt"));
		FileChannel fileChannel = fosRef.getChannel();
		
		ByteBuffer buffer1 = ByteBuffer.wrap("abcde".getBytes());
		fileChannel.write(buffer1);
		
		ByteBuffer buffer2 = ByteBuffer.wrap("12345".getBytes());
		buffer2.position(1);
		buffer2.limit(3);
		fileChannel.write(buffer2, 2);
		
		// 写入"ab23e"
		fosRef.close();
		fileChannel.close();
	}

}
